// utils/utils.go
package utils

import (
	"strings"

	"golang.org/x/net/html"
)

// CompactWhitespace 压缩连续空白为单个空格
func CompactWhitespace(str string) string {
	return strings.Join(strings.Fields(str), " ")
}

// CleanAttributes 清理并优化元素属性
func CleanAttributes(n *html.Node) {
	for i := len(n.Attr) - 1; i >= 0; i-- {
		attr := &n.Attr[i]
		// 压缩属性值中的空白
		attr.Val = strings.Join(strings.Fields(attr.Val), " ")

		// 移除 script/style 的默认 type
		if attr.Key == "type" {
			if (n.Data == "script" && attr.Val == "text/javascript") ||
				(n.Data == "style" && attr.Val == "text/css") {
				// 删除该属性
				n.Attr = append(n.Attr[:i], n.Attr[i+1:]...)
				continue
			}
		}

		// 简化布尔属性：如 selected="selected" → selected
		if attr.Key == attr.Val && isBooleanAttribute(attr.Key) {
			attr.Val = "" // Render 时会输出 <option selected> 而非 selected="selected"
		}
	}
}

// isBooleanAttribute 判断是否为 HTML5 布尔属性
func isBooleanAttribute(key string) bool {
	switch key {
	case "selected", "checked", "disabled", "readonly", "required",
		"hidden", "ismap", "async", "autofocus", "autoplay",
		"controls", "defer", "formnovalidate", "multiple", "muted",
		"novalidate", "open", "reversed", "scoped":
		return true
	}
	return false
}
